﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos.Ventas.Transacciones
{
    public class Documento_VentasHonorarios
    {
        #region Propiedades

        private string _RFC;
        private string _Usuario;

        #endregion
        
        #region Constructores

        public Documento_VentasHonorarios(string RFC, string Usuario)
        {
            this._RFC = RFC;
            this._Usuario = Usuario;
        }

        #endregion
        
        #region INSERT

        public Respuesta Insert_Documento(

            Documentos_Id Tipo_Documento,
            EstatusDocs_Id Estatus,
            int Id_Cliente,
            int Id_Moneda,
            int Id_TasaImpuesto,            
            int Id_Campana,
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            int Id_Serie,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            try
            {
                string Campo_Serie = "V_ReciboHonorarios";
                string Campo_IsActive = "IsActive_V_ReciboHonorarios";

                string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
                string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);
          

                string Query = @"
                INSERT INTO @@Tabla
                    (
                    @@Id_Documento,
                    Secuencia,
                    RFC,
                    Estatus,
                    Id_Cliente,
                    Id_Moneda,                                                                
                    Id_TasaImpuesto,
                    Id_Campana,
                    Id_Sucursal,
                    Id_FormaPago,
                    Id_MetodoPago,
                    Id_Serie,
                    Fecha_Documento,
                    Fecha_Vencimiento,
                    Fecha_Entrega,
                    Descripcion,
                    Referencia,
                    Encabezado,
                    Pie,                    
                    Impuesto,
                    Descuento,
                    Partidas,
                    Subtotal,
                    Total,
                    Saldo,
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto,
                    Is_FE
                    )
                    VALUES
                    (
                    IIF(DCount('*', '@@Tabla') = 0, 1, DMax('@@Id_Documento', '@@Tabla') + 1),
                    DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie""),
                    '@@RFC',
                    @Estatus,
                    @Id_Cliente,
                    @Id_Moneda,                                                                
                    @Id_TasaImpuesto,
                    @Id_Campana,
                    @Id_Sucursal,
                    @Id_Forma_Pago,
                    @Id_Metodo_Pago,
                    @Id_Serie,
                    @Fecha_Documento,
                    @Fecha_Vencimiento,
                    @Fecha_Entrega,
                    @Descripcion,
                    @Referencia,
                    @Encabezado,
                    @Pie,
                    0,
                    0,
                    0,
                    0,
                    0,
                    0,
                    NOW(),
                    @Usuario_Alta,
                    NOW(),
                    @Usuario_Mantto,
                    0
                    )".Replace("@@RFC", this._RFC)
                      .Replace("@@Tabla", Tabla).
                      Replace("@@Id_Documento", Id).
                      Replace("@@Campo_Serie", Campo_Serie).
                      Replace("@@Id_Serie", Id_Serie.ToString());

                OleDbCommand command = new OleDbCommand(Query);

                command.Parameters.AddWithValue("@Estatus", Estatus.GetHashCode());
                command.Parameters.AddWithValue("@Id_Cliente", Id_Cliente);
                command.Parameters.AddWithValue("@Id_Moneda", Id_Moneda);
                command.Parameters.AddWithValue("@Id_TasaImpuesto", Id_TasaImpuesto);
                command.Parameters.AddWithValue("@Id_Campana", Id_Campana);
                command.Parameters.AddWithValue("@Id_Sucursal", Id_Sucursal);
                command.Parameters.AddWithValue("@Id_Forma_Pago", Id_Forma_Pago);
                command.Parameters.AddWithValue("@Id_Metodo_Pago", Id_Metodo_Pago);
                command.Parameters.AddWithValue("@Id_Serie", Id_Serie);
                command.Parameters.AddWithValue("@Fecha_Documento", Fecha_Documento);
                command.Parameters.AddWithValue("@Fecha_Vencimiento", Fecha_Vencimiento);
                command.Parameters.AddWithValue("@Fecha_Entrega", Fecha_Entrega);
                command.Parameters.AddWithValue("@Descripcion", Descripcion.Replace("'", "''"));
                command.Parameters.AddWithValue("@Referencia", Referencia.Replace("'", "''"));
                command.Parameters.AddWithValue("@Encabezado", Encabezado.Replace("'", "''"));
                command.Parameters.AddWithValue("@Pie", Pie.Replace("'", "''"));
                command.Parameters.AddWithValue("@Usuario_Alta", this._Usuario);
                command.Parameters.AddWithValue("@Usuario_Mantto", this._Usuario);


                if (Id_Cliente == -1)
                    command.Parameters["@Id_Cliente"].Value = DBNull.Value;

                if (Id_Moneda == -1)
                    command.Parameters["@Id_Moneda"].Value = DBNull.Value;

                if (Id_TasaImpuesto == -1)
                    command.Parameters["@Id_TasaImpuesto"].Value = DBNull.Value;
                                
                if (Id_Campana == -1)
                    command.Parameters["@Id_Campana"].Value = DBNull.Value;

                if (Id_Sucursal == -1)
                    command.Parameters["@Id_Sucursal"].Value = DBNull.Value;

                if (Id_Forma_Pago == -1)
                    command.Parameters["@Id_Forma_Pago"].Value = DBNull.Value;

                if (Id_Metodo_Pago == -1)
                    command.Parameters["@Id_Metodo_Pago"].Value = DBNull.Value;

                if (Id_Serie == -1)
                    command.Parameters["@Id_Serie"].Value = DBNull.Value;                             

                SrvDB.ExecuteQuery_Insert(command);


                string Query2 = @"

                    UPDATE dbo_Cat_Empresa_Serie
                        SET @@Campo_Serie = DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie"") + 1,
                            @@Campo_IsActive = 0
                    WHERE Id_Serie = @@Id_Serie
                ".Replace("@@Id_Serie", Id_Serie.ToString())
                 .Replace("@@Campo_Serie", Campo_Serie)
                 .Replace("@@Campo_IsActive", Campo_IsActive);

                return SrvDB.ExecuteQuery_Update(Query2);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }            
        }

        public int Conversion(
            
            int Id_Documento_Origen,
            Documentos_Id Type_Documento_Origen,
            Documentos_Id Type_Documento_Destino
        ) 
        {

            int Id_Serie_Origen = 0;

            #region Campos de Type_Documento_Origen
            
            string Tabla_Origen = "";
            string Tabla_Origen_Hijo = "";
            string Id_Origen = "";

            if (Type_Documento_Origen == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla_Origen = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Tabla_Origen_Hijo = "dbo_Trans_ReciboHonorarios_Cliente_Linea";
                Id_Origen = "Id_ReciboHonorarios_Cliente";
            }
            
            #endregion

            #region Campos de Type_Documento_Destino

            string Tabla_Destino = "";
            string Tabla_Destino_Hijo = "";
            string Id_Destino = "";

            string Campo_Serie_Destino = "";
            string Campo_IsActive_Destino = "";

            if (Type_Documento_Destino == Documentos_Id.Doc_ReciboHonorariosVentas)
            {
                Tabla_Destino = "dbo_Trans_ReciboHonorarios_Cliente_Cab";
                Tabla_Destino_Hijo = "dbo_Trans_ReciboHonorarios_Cliente_Linea";
                Id_Destino = "Id_ReciboHonorarios_Cliente";

                Campo_Serie_Destino = "V_ReciboHonorarios";
                Campo_IsActive_Destino = "IsActive_V_ReciboHonorarios";
            }
            
            #endregion

            string Query_Serie = @"

                SELECT * FROM dbo_Cat_Empresa_Serie WHERE Id_Serie = DMax('Id_Serie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen"")
            ".Replace("@@Tabla_Origen", Tabla_Origen).
              Replace("@@Id_Documento_Origen", Id_Origen).
              Replace("@@Id_Origen", Id_Documento_Origen.ToString());

            DataTable dt_serie = SrvDB.ExecuteQuery_Get(Query_Serie);

            Id_Serie_Origen = Int32.Parse(dt_serie.Rows[0]["Id_Serie"].ToString());            

            string Query = @"
                INSERT INTO @@Tabla_Destino
                    (
                    @@Id_Documento_Destino,
                    Secuencia,
                    RFC,
                    Estatus,
                    Id_Cliente,
                    Fecha_Documento,
                    Fecha_Vencimiento,
                    Fecha_Entrega,
                    Pedido_Cliente,
                    Id_TasaImpuesto,                    
                    Id_Moneda,
                    Descripcion,
                    Referencia,
                    Encabezado,
                    Pie,
                    Partidas,
                    Subtotal,
                    Descuento,
                    Impuesto,
                    Total,
                    Saldo,                    
                    NumCtaBancaria,
                    Id_Sucursal,
                    Id_FormaPago,
                    Id_MetodoPago,
                    Id_Serie,
                    Id_Campana,                    
                    Fecha_Alta,
                    Usuario_Alta,
                    Fecha_Mantto,
                    Usuario_Mantto,
                    Is_FE
                    )
                    VALUES
                    (
                    IIF(DCount('*', '@@Tabla_Destino') = 0, 1, DMax('@@Id_Documento_Destino', '@@Tabla_Destino') + 1),
                    DMax('@@Campo_Serie_Destino', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie""),
                    DMax('RFC', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    @@Estatus,
                    DFirst('Id_Cliente', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Documento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Vencimiento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Entrega', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Pedido_Cliente', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_TasaImpuesto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    DFirst('Id_Moneda', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Descripcion', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Referencia', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Encabezado', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Pie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Partidas', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Subtotal', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Descuento', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Impuesto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Total', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Saldo', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    DFirst('NumCtaBancaria', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Sucursal', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_FormaPago', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_MetodoPago', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Serie', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Id_Campana', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),                    
                    DFirst('Fecha_Alta', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Usuario_Alta', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Fecha_Mantto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    DFirst('Usuario_Mantto', '@@Tabla_Origen', ""@@Id_Documento_Origen = @@Id_Origen""),
                    0

                )".Replace("@@Tabla_Origen", Tabla_Origen).
                   Replace("@@Tabla_Destino", Tabla_Destino).
                   Replace("@@Id_Origen", Id_Documento_Origen.ToString()).
                   Replace("@@Id_Documento_Destino", Id_Destino).
                   Replace("@@Id_Documento_Origen", Id_Origen).
                   Replace("@@Campo_Serie_Destino", Campo_Serie_Destino).
                   Replace("@@Id_Serie", Id_Serie_Origen.ToString()).
                   Replace("@@Estatus", EstatusDocs_Id.Estatus_Doc_Cargado.GetHashCode().ToString());

            Respuesta q1 = SrvDB.ExecuteQuery_Insert(new OleDbCommand(Query));

            int Res_Q4 = 0;
            string Query4 = @" SELECT IIF(DCount('*', '@@Tabla_Destino') = 0, 1, DMax('@@Id_Documento_Destino', '@@Tabla_Destino'))"
                .Replace("@@Tabla_Destino", Tabla_Destino)
                .Replace("@@Id_Documento_Destino", Id_Destino);

            Res_Q4 = Int32.Parse(SrvDB.ExecuteQuery_Get(Query4).Rows[0][0].ToString());


            string Query_Lineas_Original = @"

                SELECT * FROM @@Tabla_Origen_Hijo WHERE Id_Padre = @@Id_Origen;
            ".Replace("@@Tabla_Origen_Hijo", Tabla_Origen_Hijo)
             .Replace("@@Id_Origen", Id_Documento_Origen.ToString());

            DataTable dt_Lineas_Original = SrvDB.ExecuteQuery_Get(Query_Lineas_Original);

            for (int i = 0; i < dt_Lineas_Original.Rows.Count; i++)
            {
                string Query_Lineas = @"

                INSERT INTO @@Tabla_Destino_Hijo
                    (
                        Id_Linea,
                        RFC,
                        Id_Padre,
                        Secuencia,
                        Id_Articulo,
                        Cantidad,
                        Precio_Unitario,
                        Precio_SubTotal,
                        Porc_IVA,
                        IVA,
                        Porc_IVARet,
                        IVARet,
                        Porc_ISRRet,
                        ISRRet,
                        Precio_Total,
                        Cantidad_Pendiente,
                        Comentarios,
                        Fecha_Alta,
                        Usuario_Alta,
                        Fecha_Mantto,
                        Usuario_Mantto
                    )

                    VALUES 
                    (
                        IIF(DCount('*', '@@Tabla_Destino_Hijo') = 0, 1, DMax('Id_Linea', '@@Tabla_Destino_Hijo') + 1),
                        '@@RFC',
                        @@Id_Padre,
                        @@Secuencia,
                        @@Id_Articulo,
                        @@Cantidad,
                        @@Precio_Unitario,
                        @@Precio_SubTotal,
                        @@Porc_IVA,
                        @@IVA,
                        @@Porc_IVARet,
                        @@IVARet,
                        @@Porc_ISRRet,
                        @@ISRRet,
                        @@Precio_Total,
                        @@Cantidad_Pendiente,                        
                        '@@Comentarios',
                        '@@Fecha_Alta',
                        '@@Usuario_Alta',
                        '@@Fecha_Mantto',
                        '@@Usuario_Mantto'
                    )
                ".Replace("@@Tabla_Destino_Hijo", Tabla_Destino_Hijo)
                 .Replace("@@Id_Padre", Res_Q4.ToString())
                 .Replace("@@RFC", dt_Lineas_Original.Rows[i]["RFC"].ToString())
                 .Replace("@@Secuencia", dt_Lineas_Original.Rows[i]["Secuencia"].ToString())
                 .Replace("@@Id_Articulo", dt_Lineas_Original.Rows[i]["Id_Articulo"].ToString())
                 .Replace("@@Cantidad_Pendiente", dt_Lineas_Original.Rows[i]["Cantidad_Pendiente"].ToString())
                 .Replace("@@Cantidad", dt_Lineas_Original.Rows[i]["Cantidad"].ToString())                 
                 .Replace("@@Precio_Unitario", dt_Lineas_Original.Rows[i]["Precio_Unitario"].ToString())
                 .Replace("@@Precio_SubTotal", dt_Lineas_Original.Rows[i]["Precio_SubTotal"].ToString())                 
                 .Replace("@@Porc_IVARet", dt_Lineas_Original.Rows[i]["Porc_IVARet"].ToString())
                 .Replace("@@Porc_ISRRet", dt_Lineas_Original.Rows[i]["Porc_ISRRet"].ToString())
                 .Replace("@@Porc_IVA", dt_Lineas_Original.Rows[i]["Porc_IVA"].ToString())
                 .Replace("@@IVARet", dt_Lineas_Original.Rows[i]["IVARet"].ToString())
                 .Replace("@@ISRRet", dt_Lineas_Original.Rows[i]["ISRRet"].ToString())
                 .Replace("@@IVA", dt_Lineas_Original.Rows[i]["IVA"].ToString())
                 .Replace("@@Precio_Total", dt_Lineas_Original.Rows[i]["Precio_Total"].ToString())
                 .Replace("@@Comentarios", dt_Lineas_Original.Rows[i]["Comentarios"].ToString())
                 .Replace("@@Fecha_Alta", dt_Lineas_Original.Rows[i]["Fecha_Alta"].ToString())
                 .Replace("@@Usuario_Alta", dt_Lineas_Original.Rows[i]["Usuario_Alta"].ToString())
                 .Replace("@@Fecha_Mantto", dt_Lineas_Original.Rows[i]["Fecha_Mantto"].ToString())
                 .Replace("@@Usuario_Mantto", dt_Lineas_Original.Rows[i]["Usuario_Mantto"].ToString());

                Respuesta q2 = SrvDB.ExecuteQuery_Insert(Query_Lineas);
            }

            string Query3 = @"

                    UPDATE dbo_Cat_Empresa_Serie
                        SET @@Campo_Serie = DMax('@@Campo_Serie', 'dbo_Cat_Empresa_Serie', ""Id_Serie = @@Id_Serie"") + 1,
                            @@Campo_IsActive = 0
                    WHERE Id_Serie = @@Id_Serie
                ".Replace("@@Id_Serie", Id_Serie_Origen.ToString())
                 .Replace("@@Campo_Serie", Campo_Serie_Destino)
                 .Replace("@@Campo_IsActive", Campo_IsActive_Destino);

            Respuesta q3 = SrvDB.ExecuteQuery_Update(Query3);

            string Query5 = @"
                
                INSERT INTO dbo_Trans_Relacion_Documentos
                (
                    Id_Relacion,
                    Tipo_Doc_Origen,
                    Id_Doc_Origen,
                    Tipo_Doc_Destino,
                    Id_Doc_Destino,
                    Fecha_Alta,
                    Usuario_Alta
                )
                VALUES
                (
                    IIF(DCount('*', 'dbo_Trans_Relacion_Documentos') = 0, 1, DMax('Id_Relacion', 'dbo_Trans_Relacion_Documentos') + 1),
                    @@Tipo_Doc_Origen,
                    @@Id_Doc_Origen,
                    @@Tipo_Doc_Destino,
                    @@Id_Doc_Destino,
                    NOW(),
                    '@@Usuario'
                )

            ".Replace("@@Tipo_Doc_Origen", Type_Documento_Origen.GetHashCode().ToString())
             .Replace("@@Id_Doc_Origen", Id_Documento_Origen.ToString()) 
             .Replace("@@Tipo_Doc_Destino", Type_Documento_Destino.GetHashCode().ToString())
             .Replace("@@Id_Doc_Destino", Res_Q4.ToString())
             .Replace("@@Usuario", this._Usuario);

            Respuesta q5 = SrvDB.ExecuteQuery_Insert(Query5);

            if (q1.Id == 1 && q3.Id == 1 && q5.Id == 1)
            {
                return Res_Q4;
            }

            return -1;
        }

        #endregion

        #region UPDATE

        public Respuesta Update_Saldo_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento, double Alt)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = "UPDATE @@Tabla SET Saldo = Saldo @@Operador @@Monto WHERE RFC = '@@RFC' AND @@Id_Documento = @@Id";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Operador", Alt > 0.0 ? "-" : "+");
            Query = Query.Replace("@@Monto", Math.Abs(Alt).ToString());

            return SrvDB.ExecuteQuery_Update(Query);
        }

        public Respuesta Update_Documento_Cabecera(
            
            int Id_Documento,
            Documentos_Id Tipo_Documento,            
            int Id_Sucursal,
            int Id_Forma_Pago,
            int Id_Metodo_Pago,
            DateTime? Fecha_Documento,
            DateTime? Fecha_Vencimiento,
            DateTime? Fecha_Entrega,
            string Descripcion,
            string Referencia,
            string Encabezado,
            string Pie
        )
        {
            try
            {
                string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
                string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

                string Query = @"
                UPDATE @@Tabla
                    
                    SET 
                    
                    Id_Sucursal = @Id_Sucursal,
                    Id_FormaPago = @Id_FormaPago,
                    Id_MetodoPago = @Id_MetodoPago,
                    Fecha_Documento = @Fecha_Documento,
                    Fecha_Vencimiento = @Fecha_Vencimiento,
                    Fecha_Entrega = @Fecha_Entrega,
                    Descripcion = @Descripcion,
                    Referencia = @Referencia,
                    Encabezado = @Encabezado,
                    Pie = @Pie,                                        
                    Fecha_Mantto = NOW(),
                    Usuario_Mantto = @Usuario_Mantto
                    
                    WHERE @@Id_Documento = @Id
                    
                    ".Replace("@@Tabla", Tabla).Replace("@@Id_Documento", Id);


                OleDbCommand command = new OleDbCommand(Query);

                command.Parameters.AddWithValue("@Id_Sucursal", Id_Sucursal);
                command.Parameters.AddWithValue("@Id_Forma_Pago", Id_Forma_Pago);
                command.Parameters.AddWithValue("@Id_Metodo_Pago", Id_Metodo_Pago);
                command.Parameters.AddWithValue("@Fecha_Documento", Fecha_Documento);
                command.Parameters.AddWithValue("@Fecha_Vencimiento", Fecha_Vencimiento);
                command.Parameters.AddWithValue("@Fecha_Entrega", Fecha_Entrega);
                command.Parameters.AddWithValue("@Descripcion", Descripcion.Replace("'", "''"));
                command.Parameters.AddWithValue("@Referencia", Referencia.Replace("'", "''"));
                command.Parameters.AddWithValue("@Encabezado", Encabezado.Replace("'", "''"));
                command.Parameters.AddWithValue("@Pie", Pie.Replace("'", "''"));
                command.Parameters.AddWithValue("@Usuario_Mantto", this._Usuario);
                command.Parameters.AddWithValue("@Id", Id_Documento.ToString());

                if (Id_Sucursal == -1)
                    command.Parameters["@Id_Sucursal"].Value = DBNull.Value;

                if (Id_Forma_Pago == -1)
                    command.Parameters["@Id_Forma_Pago"].Value = DBNull.Value;

                if (Id_Metodo_Pago == -1)
                    command.Parameters["@Id_Metodo_Pago"].Value = DBNull.Value;
                                
                return SrvDB.ExecuteQuery_Update(command);
            }
            catch (Exception Ex)
            {
                return new Respuesta(2, Ex.Message);
            }
        }

        public Respuesta Updata_Documento_Estatus(
            
            int Id_Documento,
            Documentos_Id Tipo_Documento,
            EstatusDocs_Id NuevoEstatus
        )
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            if (NuevoEstatus == EstatusDocs_Id.Estatus_Doc_Asentado)
            {
                DataTable dt_Doc = Get_Documento_By_Id(Tipo_Documento, Id_Documento);
                string Aux_Id_Cliente = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Cliente"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Cliente"].ToString();
                string Aux_Id_TasaImpuesto = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_TasaImpuesto"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_TasaImpuesto"].ToString();    
                string Aux_Id_Campana = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Campana"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Campana"].ToString();
                string Aux_Id_Sucursal = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Sucursal"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Sucursal"].ToString();
                string Aux_Id_Serie = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_Serie"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_Serie"].ToString();
                string Aux_Id_Forma_Pago = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_FormaPago"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_FormaPago"].ToString();
                string Aux_Id_Metodo_Pago = String.IsNullOrEmpty(dt_Doc.Rows[0]["Id_MetodoPago"].ToString()) ? "-1" : dt_Doc.Rows[0]["Id_MetodoPago"].ToString();

                string FE = "";
                if (FuncionesClass.ConsultaFE(this._RFC) == 1)
                    FE = "1";
                else
                    FE = "0";

                string QueryAsentado = @"

                    UPDATE @@Tabla
                        SET 
                            Foto_Cliente_RFC = DFirst('RFC_Cliente', 'dbo_Cat_Cliente', 'Id_Cliente = @@Id_Cliente'),
                            Foto_Cliente_RazonSocial = DFirst('Razon_Social', 'dbo_Cat_Cliente', 'Id_Cliente = @@Id_Cliente'),
                            Foto_TasaImpuesto = DFirst('Nombre', 'dbo_Cat_TasaImpuesto', 'Id_TasaImpuesto = @@Id_TasaImpuesto'),                            
                            Foto_Campana = DFirst('Nombre', 'dbo_Cat_Campana', 'Id_Campana = @@Id_Campana'),
                            Foto_Sucursal = DFirst('Nombre', 'dbo_Cat_Sucursal', 'Id_Sucursal = @@Id_Sucursal'),
                            Foto_Serie = DFirst('Nombre', 'dbo_Cat_Empresa_Serie', 'Id_Serie = @@Id_Serie'),
                            Foto_FormaPago = DFirst('Nombre', 'dbo_Cat_Forma_Pago', 'Id_Forma_Pago = @@Id_Forma_Pago'),
                            Foto_MetodoPago  = DFirst('Nombre', 'dbo_Cat_Metodo_Pago', 'Id_Metodo_Pago = @@Id_Metodo_Pago'),
                            Is_FE = @@Is_FE
                        WHERE @@Id_Desc = @@Id
                ".Replace("@@Tabla", Tabla)
                 .Replace("@@Id_Desc", Id)
                 .Replace("@@Id_Cliente", Aux_Id_Cliente)
                 .Replace("@@Id_TasaImpuesto", Aux_Id_TasaImpuesto)                 
                 .Replace("@@Id_Campana", Aux_Id_Campana)
                 .Replace("@@Id_Sucursal", Aux_Id_Sucursal)
                 .Replace("@@Id_Serie", Aux_Id_Serie)
                 .Replace("@@Id_Forma_Pago", Aux_Id_Forma_Pago)
                 .Replace("@@Id_Metodo_Pago", Aux_Id_Metodo_Pago)
                 .Replace("@@Is_FE", FE)
                 .Replace("@@Id", Id_Documento.ToString());

                SrvDB.ExecuteQuery_Update(QueryAsentado);
            }

            string Query = @"

                UPDATE @@Tabla SET Estatus = @@Estatus WHERE @@Id_Documento = @@Id
            ".Replace("@@Tabla", Tabla)
             .Replace("@@Estatus", NuevoEstatus.GetHashCode().ToString())
             .Replace("@@Id_Documento", Id)
             .Replace("@@Id", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Update(Query);
        }
        
        #endregion

        #region SELECT
        
        public DataTable Get_Report(int Id_Documento)
        {
            string Query = @"
                            
                SELECT        

	                a.Id_ReciboHonorarios_Cliente, 
	                a.Secuencia, 
	                a.RFC, 
	                a.Id_Cliente, 
	                c.RFC_Cliente,
	                c.Razon_Social, 
	                c.Nombre_Comercial, 
	                Sucursal.Calle, 
	                Sucursal.Num_Ext, 
	                Sucursal.Num_Int, 
	                Sucursal.Colonia, 
	                Sucursal.CP, 
	                Estado_SIIE.Nombre AS Estado, 
	                Sucursal.Municipio, 
	                Pais_SIIE.Nombre AS Pais, 
	
	                Sucursal.Calle + ' ' + Sucursal.Num_Ext + ' ' +
                    Switch(
		                Sucursal.Num_Int   IS NULL, ', COL. ',
		                true, Sucursal.Num_Int + ', COL. '
                    )
	                + Sucursal.Colonia + ', C.P. ' + Sucursal.CP + ', ' + Sucursal.Municipio + ', ' + Estado_SIIE.Nombre AS Direccion, 
	
	                c.Calle AS Calle_Cliente, 
	                c.Num_Ext AS Num_Ext_Cliente,
	                c.Num_Int AS Num_Int_Cliente, 
	                c.Colonia AS Colonia_Cliente, 
	                c.CP AS CP_Cliente, 
	                Estado_Cliente.Nombre AS Estado_Cliente, 
	                c.Municipio AS Municipio_Cliente, 
	                Pais_Cliente.Nombre AS Pais_Cliente, 
	                c.Calle + ' ' + c.Num_Ext + ' ' + 
	                Switch(
		                c.Num_Int   IS NULL, ', COL. ',
		                true, c.Num_Int + ', COL. '
                    )	
	
	                + c.Colonia + ', C.P. ' + c.CP + ', ' + c.Municipio + ', ' + Estado_Cliente.Nombre AS Direccion_Cliente, 
	                d.Id_GrupoClientes, 
	                d.Nombre AS Grupo_Cliente, 
	
                    YEAR(a.Fecha_Documento)  AS Anio, 
	                MONTH(a.Fecha_Documento) AS Mes_Id,  
                         
	                Switch(
		                MONTH(a.Fecha_Documento) < 10, '0' + Cstr(MONTH(a.Fecha_Documento)),
		                true, Cstr(MONTH(a.Fecha_Documento))
                    ) AS Mes, 

	                a.Fecha_Documento, 
	                a.Fecha_Entrega, 
	                a.Fecha_Vencimiento, 
	                e.Id_Articulo, 
	                e.Nombre AS Articulo, 
	                e.NombreTicket, 	
	
	                Switch(
		                e.Marca IS NULL, 'Sin Marca',
		                true, e.Marca
                    ) AS Marca, 

	                f.Id_GrupoProductos, 
	                f.Nombre AS Grupo_Productos, 
	                i.Id_SubgrupoProductos, 
	                i.Nombre AS Subgrupo_Productos, 
	                j.Id_Linea, 
	                j.Nombre AS Linea, 
	                g.Id_Color, 
	                g.Nombre AS Color, 
	                h.Id_Talla, 
	                h.Nombre AS Talla, 
	                b.Precio_SubTotal * k.TipoCambio AS Importe_Pesos, 
	                b.Precio_SubTotal AS Importe_Moneda_Fact, 
	                n.Nombre AS UnidadMedida, 
	                b.Cantidad, 
	                b.Precio_Unitario, 
	                b.Precio_SubTotal, 
	                b.Porc_IVA, 
	                b.IVA, 
	                b.Porc_IVARet, 
	                b.IVARet, 
	                b.Porc_ISRRet, 
	                b.ISRRet, 
	                b.Precio_Total, 
	                o.Clave AS Clave_Moneda, 
	                o.Simbolo AS Simbolo_Moneda, 
	                o.Nombre AS Moneda, 
	                a.Descripcion, a.Referencia, 
	                a.Estatus, 
	                dbo_Cat_Estatus.Nombre AS Estatus_Desc, 
	                a.Saldo, 
	                a.Id_Campana, 
	
	                Switch(
		                dbo_Cat_Campana.Nombre IS NULL, 'Sin Campana',
		                true, dbo_Cat_Campana.Nombre
                    ) AS Nombre,
	                a.Encabezado, 
	                a.Pie, 
	                EmpSerie.Nombre AS Serie, 
	                b.Comentarios

                FROM
	
	                ((((((((((((((((((((dbo_Trans_ReciboHonorarios_Cliente_Cab AS a 
	                LEFT OUTER JOIN dbo_Trans_ReciboHonorarios_Cliente_Linea AS b ON a.Id_ReciboHonorarios_Cliente = b.Id_Padre )
	                INNER JOIN dbo_Cat_Cliente AS c ON a.Id_Cliente = c.Id_Cliente )
	                INNER JOIN dbo_Cat_Grupo_Clientes AS d ON c.Id_GrupoClientes = d.Id_GrupoClientes)
	                LEFT OUTER JOIN dbo_Cat_Articulo AS e ON b.Id_Articulo = e.Id_Articulo)
	                LEFT OUTER JOIN dbo_Cat_Grupo_Productos AS f ON e.Id_GrupoProductos = f.Id_GrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_Color AS g ON e.Id_Color = g.Id_Color )
	                LEFT OUTER JOIN dbo_Cat_Talla AS h ON e.Id_Talla = h.Id_Talla )
	                LEFT OUTER JOIN dbo_Cat_Subgrupo_Productos AS i ON e.Id_SubgrupoProductos = i.Id_SubgrupoProductos )
	                LEFT OUTER JOIN dbo_Cat_Linea AS j ON e.Id_Linea = j.Id_Linea )
	                INNER JOIN dbo_Cat_TipoCambio AS k ON k.Id_Moneda = a.Id_Moneda )
	                INNER JOIN dbo_Cat_Moneda AS o ON o.Id_Moneda = a.Id_Moneda )
	                LEFT OUTER JOIN dbo_Cat_UM AS n ON e.Id_UM = n.Id_UM  )
                    LEFT OUTER JOIN dbo_Cat_Campana ON a.Id_Campana = dbo_Cat_Campana.Id_Campana )
	                INNER JOIN dbo_Cat_Estatus ON a.Estatus = dbo_Cat_Estatus.Estatus )
	                INNER JOIN dbo_Cat_Sucursal AS Sucursal ON Sucursal.Id_Sucursal = a.Id_Sucursal )
	                LEFT OUTER JOIN dbo_Cat_Empresa_Serie AS EmpSerie ON EmpSerie.Id_Serie = a.Id_Serie)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_Cliente ON Pais_Cliente.Id_SIIE_Pais = c.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Pais AS Pais_SIIE ON Pais_SIIE.Id_SIIE_Pais = Sucursal.Id_Pais)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_Cliente ON Estado_Cliente.Id_SIIE_Estado = c.Id_Estado)
                    INNER JOIN dbo_Cat_SIIE_Estado AS Estado_SIIE ON Estado_SIIE.Id_SIIE_Estado = Sucursal.Id_Estado)
	
                WHERE 
                    (a.Id_ReciboHonorarios_Cliente = @@Id_Documento) 
                           
            ";

            Query = Query.Replace("@@Id_Documento", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public string Get_Serie_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = @"SELECT A1.*, A2.Nombre as Desc_Serie FROM @@Tabla as A1 INNER JOIN dbo_Cat_Empresa_Serie as A2 ON A1.Id_Serie = A2.Id_Serie 
                            WHERE A1.RFC = '@@RFC' AND A1.@@Id_Documento = @@Id";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());
            Query = Query.Replace("@@Tabla", Tabla);

            return SrvDB.ExecuteQuery_Get(Query).Rows[0]["Desc_Serie"].ToString();
        }
        
        public Int32 Get_Moneda_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = "SELECT * FROM @@Tabla WHERE RFC = '@@RFC' AND @@Id_Documento = @@Id";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());
            Query = Query.Replace("@@Tabla", Tabla);

            return Int32.Parse(SrvDB.ExecuteQuery_Get(Query).Rows[0]["Id_Moneda"].ToString());
        }

        public double Get_Saldo_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento, int Id_Moneda)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = "SELECT * FROM @@Tabla WHERE RFC = '@@RFC' AND @@Id_Documento = @@Id";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());
            Query = Query.Replace("@@Tabla", Tabla);

            var FMonedaToPesos = FromMonedaToPesos(Int32.Parse(SrvDB.ExecuteQuery_Get(Query).Rows[0]["Id_Moneda"].ToString()), Double.Parse(SrvDB.ExecuteQuery_Get(Query).Rows[0]["Saldo"].ToString()));
            var Monto = FromPesosToMoneda(Id_Moneda, FMonedaToPesos);   

            return Monto;
        }

        private double FromMonedaToPesos(int IdMoneda, double Cantidad)
        {
            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TipoCambio(this._RFC, this._Usuario);
            var TipoDeCambio = db.Get_TipoCambio_Por_Id_Moneda(IdMoneda).Rows[0]["TipoCambio"].ToString();
            return Double.Parse(TipoDeCambio) * Cantidad;
        }

        private double FromPesosToMoneda(int IdMoneda, double Cantidad)
        {
            var db = new SIIE_ERP.BaseDatos.Bancos.Catalogos.dbo_Cat_TipoCambio(this._RFC, this._Usuario);
            var TipoDeCambio = db.Get_TipoCambio_Por_Id_Moneda(IdMoneda).Rows[0]["TipoCambio"].ToString();
            return Cantidad / Double.Parse(TipoDeCambio);
        }

        public DataTable Get_Documento_By_Id_Without_FK(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = @"SELECT * FROM @@Tabla WHERE @@Id_Documento = @@Id";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documento_By_Id(Documentos_Id Tipo_Documento, int Id_Documento)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);
            string Id = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Id(Tipo_Documento);

            string Query = @"
                            SELECT 
                                A1.*,
								A2.RFC_Cliente AS Desc_Cliente,
								A3.Nombre AS Desc_TasaImpuesto,								

                                A3.IVA AS Porc_IVA,
                                A3.Retencion AS Porc_IVARet,
                                A3.ISR AS Porc_ISRRet,

								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Sucursal,
								A7.Nombre AS Desc_FormaPago,
								A8.Nombre AS Desc_MetodoPago,
                                A9.Nombre AS Desc_Serie,
                                A10.Nombre AS Desc_Campana

                            FROM ((((((((@@Tabla AS A1
                            
                                LEFT JOIN dbo_Cat_Cliente       AS A2 ON A1.Id_Cliente = A2.Id_Cliente)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A3 ON A1.Id_TasaImpuesto = A3.Id_TasaImpuesto)                                
                                LEFT JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                LEFT JOIN dbo_Cat_Sucursal       AS A6 ON A1.Id_Sucursal = A6.Id_Sucursal)
                                LEFT JOIN dbo_Cat_Forma_Pago       AS A7 ON A1.Id_FormaPago = A7.Id_Forma_Pago)
                                LEFT JOIN dbo_Cat_Metodo_Pago       AS A8 ON A1.Id_MetodoPago = A8.Id_Metodo_Pago)
                                LEFT JOIN dbo_Cat_Empresa_Serie       AS A9 ON A1.Id_Serie = A9.Id_Serie)
                                LEFT JOIN dbo_Cat_Campana       AS A10 ON A1.Id_Campana = A10.Id_Campana)
        
                            WHERE A1.@@Id_Documento = @@Id";
            
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Id_Documento", Id);
            Query = Query.Replace("@@Id", Id_Documento.ToString());

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documento_Pipeline(int Id_Campana, int Id_GrupoClientes, int Id_Cliente, int Id_Colaborador, int Tiempo)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Documentos_Id.Doc_ReciboHonorariosVentas);
            
            string Query = @"
                            SELECT 
                                A1.*,
								A2.RFC_Cliente AS Desc_Cliente,
								A3.Nombre AS Desc_TasaImpuesto,								

                                A3.IVA AS Porc_IVA,
                                A3.Retencion AS Porc_IVARet,
                                A3.ISR AS Porc_ISRRet,

								A5.Nombre AS Desc_Moneda,
								A6.Nombre AS Desc_Sucursal,
								A7.Nombre AS Desc_FormaPago,
								A8.Nombre AS Desc_MetodoPago,
                                A9.Nombre AS Desc_Serie,
                                A10.Nombre AS Desc_Campana

                            FROM ((((((((@@Tabla AS A1
                            
                                LEFT JOIN dbo_Cat_Cliente       AS A2 ON A1.Id_Cliente = A2.Id_Cliente)
                                LEFT JOIN dbo_Cat_TasaImpuesto       AS A3 ON A1.Id_TasaImpuesto = A3.Id_TasaImpuesto)                                
                                LEFT JOIN dbo_Cat_Moneda       AS A5 ON A1.Id_Moneda = A5.Id_Moneda)
                                LEFT JOIN dbo_Cat_Sucursal       AS A6 ON A1.Id_Sucursal = A6.Id_Sucursal)
                                LEFT JOIN dbo_Cat_Forma_Pago       AS A7 ON A1.Id_FormaPago = A7.Id_Forma_Pago)
                                LEFT JOIN dbo_Cat_Metodo_Pago       AS A8 ON A1.Id_MetodoPago = A8.Id_Metodo_Pago)
                                LEFT JOIN dbo_Cat_Empresa_Serie       AS A9 ON A1.Id_Serie = A9.Id_Serie)
                                LEFT JOIN dbo_Cat_Campana       AS A10 ON A1.Id_Campana = A10.Id_Campana)
        
                            WHERE A1.RFC = '@@RFC' 

                                AND A1.Estatus = 410
                                AND (@@Id_Campana = -1 OR A1.Id_Campana = @@Id_Campana)
                                AND (@@Id_Cliente = -1 OR A1.Id_Cliente = @@Id_Cliente)
                                AND (@@Id_Cliente = -1 OR A1.Id_Cliente = @@Id_Cliente)                                
                                AND (@@Id_GrupoClientes = -1 OR A2.Id_GrupoClientes = @@Id_GrupoClientes)

                                AND
                                (
					            (@@Tiempo = 1 and Year(A1.Fecha_Alta) = Year(NOW()) and Month(A1.Fecha_Alta) = Month(NOW())) or
					            (@@Tiempo = 2 and Year(A1.Fecha_Alta) = Year(NOW()) and ((Month(A1.Fecha_Alta) >= 10 and Month(A1.Fecha_Alta) <= 12 and Month(NOW()) >= 10 and Month(NOW()) <= 12) or (Month(A1.Fecha_Alta) >= 7 and Month(A1.Fecha_Alta) <= 9 and Month(NOW()) >= 7 and Month(NOW()) <= 9) or (Month(A1.Fecha_Alta) >= 4 and Month(A1.Fecha_Alta) <= 6 and Month(NOW()) >= 4 and Month(NOW()) <= 6) or (Month(A1.Fecha_Alta) >= 1 and Month(A1.Fecha_Alta) <= 3 and Month(NOW()) >= 1 and Month(NOW()) <= 3))) or
					            (@@Tiempo = 3 and Year(A1.Fecha_Alta) = Year(NOW()) and ((Month(A1.Fecha_Alta) >= 7 and Month(A1.Fecha_Alta) <= 12 and Month(NOW()) >= 7 and Month(NOW()) <= 12) or (Month(A1.Fecha_Alta) >= 1 and Month(A1.Fecha_Alta) <= 6 and Month(NOW()) >= 1 and Month(NOW()) <= 6))) or
					            (@@Tiempo = 4 and Year(A1.Fecha_Alta) = Year(NOW())) or
					            (@@Tiempo = 5 and Year(A1.Fecha_Alta) = Year(DateAdd('yyyy',-1,NOW())))
					            )
                            ";

            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@Tiempo", Tiempo.ToString());
            Query = Query.Replace("@@Id_GrupoClientes", Id_GrupoClientes.ToString());
            Query = Query.Replace("@@Id_Cliente", Id_Cliente.ToString());
            Query = Query.Replace("@@Id_Campana", Id_Campana.ToString());
            
            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documentos(Documentos_Id Tipo_Documento)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);

            string Query = @"

                SELECT 

                    A1.*, 
                    
                    A3.Nombre AS Desc_Serie,
                    A4.Nombre AS Desc_Estatus,
                    A5.Razon_Social AS Desc_Cliente

                FROM 

                    (((@@Tabla AS A1 
                    
                    INNER JOIN dbo_Cat_Empresa_Serie AS A3 ON A3.Id_Serie = A1.Id_Serie)
                    INNER JOIN dbo_Cat_Estatus AS A4 ON A4.Estatus = A1.Estatus)
                    INNER JOIN dbo_Cat_Cliente AS A5 ON A5.Id_Cliente = A1.Id_Cliente)

                WHERE A1.RFC = '@@RFC' ORDER BY Id_ReciboHonorarios_Cliente DESC
            ";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        public DataTable Get_Documentos(Documentos_Id Tipo_Documento, string Cliente)
        {
            string Tabla = SIIE_ERP.BaseDatos.Bancos.Documentos.Get_Table_Name(Tipo_Documento);

            string Query = "SELECT * FROM @@Tabla WHERE RFC = '@@RFC' AND SALDO <> 0.00  AND Id_Cliente = @@IdCliente";
            Query = Query.Replace("@@RFC", this._RFC);
            Query = Query.Replace("@@Tabla", Tabla);
            Query = Query.Replace("@@IdCliente", Cliente);

            return SrvDB.ExecuteQuery_Get(Query);
        }

        #endregion

    }
}



